package com.bytezreo.objectclass;

import java.util.Date;

/*
 * 
 * ==  和 Equals() 区别
 * 
 * 一.           ==：运算符
 * 1.可以使用在基本数据类型变量和引用数据类型变量中
 * 2.如果比较的是基本数据类型变量：比较两个变量保存的数据类型是否相等。（不一定类型相同）
 *   如果比较是引用数据类型变量：比较两个变量的地址值是否相同，及两个引用是否指向同一个对象实体
 * 
 *  
 * 二             equals（）方法的使用：
 *  
 * 1.是一个方法  ，不是运算符
 * 2.只能适用于引用数据类型
 * 补充： == 符号使用时，必须保证符号左右两边的变量类型一致
 * 3.Object类中equals（）的定义：
 *   public boolean equals(Object obj) {
 *      return (this == obj);
 *  }
 *  说明：Object类中定义的 equals（）和 ==  的用作是相同的，比较两个对象的地址值是否相同，
 *  及两个引用是否指向同一个对象实体
 * 
 * 4. 像String，Date，File,包装类等都重写了Object类中的equals()方法，重写以后不是比较两个引用
 * 的地址是否相同，而是比较两个对象的”实体内容“是否相同
 * 
 * 5.通常情况下，自定义的类。如果使用equals()的话，比较两个对象的地址值
 * 如何，在自定义类中使用equals()方法，比较两个对象的内容，需要对Object类中的
 * equals方法进行重写
 * 重写原则：比较两个对象的实体内容是否相同.
 * 
 * 
 * 
 */
public class EqualsTest
{
	public static void main(String[] args) {
		
		
		//基本数据类型测试
		int i =10;
		int j = 10;
		double d = 10.0;
		
		System.out.println(i == j);  //true
		//自动类型提升
		System.out.println(i == d);  //true
		
		boolean b = true;
		  
//		System.out.println(i == b);    不能进行比较 boolean
		
		char c = 10;
		System.out.println(i ==c );  //true
		
		char c1 = 'A';
		char c2 = 65;
		System.out.println(c1 == c2); //true
		
		
		//引用数据类型测试
		Customer cust1 = new  Customer("Tom",21);
		Customer cust2 = new  Customer("Tom",21);
		
		System.out.println(cust1 == cust2);   //false  地址值不一样
		
		String str1 = new String("zhenglei");
		String str2 = new String("zhenglei");
		
		System.out.println(str1 == str2);  //false  地址值不一样
		
		System.out.println("------------equals-------------");
		//没重写 equals
		//System.out.println(cust1.equals(cust2));  //false
		
		//重写 equals
		System.out.println(cust1.equals(cust2));  //true
		
		System.out.println(str1.equals(str2));    //true
		
		
		Date date1 = new Date(23132123152123L);
		Date date2 = new Date(23132123152123L);
		
		System.out.println(date1.equals(date2));  //true
		
		
		
		
	}
}































































































